Java 25に至る道
Javaの作り方
半年ごとの定期リリース
できたものからリリース
それまでは「この機能ができたらリリース」
OpenJDKはあまり関係ない
機能追加はLTSを意識する
OpenJDK
言語仕様
提案内容
新機能
機能削除
まずはお試し機能として入る
Preview JEP
言語仕様、コアライブラリ
Experimental JEP
VM
GCの改善など
Incubator JEP
コアライブラリ以外のAPI
HTTP周りなど
Javaの新要素のおおまかな流れ
初心者に優しく
宣言的記法、小さなオブジェクト
関数型プログラミングのパラダイム(Java 21までに入っている)
起動時間短縮
Safety/Integrity
初心者に優しく
ハードルが高い?
約束が多い
説明の難しい概念がある
実行までの道のりが長い
コンパイルが必要
機能
コンパイルを明示しないで実行できる
インポートをモジュール単位で書けるようにした
mainを簡単に書けるように
void main(){IO.println("Hello, World!");}
クラス不要
mainメソッドの簡略化
staticメソッドでもなくなった
標準入出力クラス
宣言的記法、小さなオブジェクト
Java 8:Project Lambdaからの流れ
文から式へ
手続型から宣言型へ
少数のミュータブルな大きなオブジェクトから多数のイミュータブルな小さなオブジェクトへ
Value Classes and Objectsへの布石
Stream Gatherers
中間操作の拡充
Collectorのような動作が可能になった
状態を持てるようになった
移動平均の計算など
やること
起動時間短縮
ピークパフォーマンスに至る時間の短縮
プロファイルをして最適化するフローを短縮する
フットプリント削減
具体的なJEP
クラスロード後のイメージをキャッシュ化
Ahead-of-Time cache(AoT)
Ahead-of-Time Method Profiling
Profileする
ループの展開など
=> Profilingに時間がかかるので、Profiling結果だけをcacheする
ネイティブコンパイラの実行時最適化は少し弱い
Ahead-of-Time Code Compilation(導入時期未定)
Safety/Integrity
安全性の追求は常に
セキュリティ関連 API
保守できない機能の削除
32bit Windowsポーティング削除
互換性を少し犠牲にしている
デフォルト動作の変更
まとめ
長い目で見るとJavaの方向性がわかる
力を入れているところ
これから向かおうとしているところ
時代が変わればプログラミングスタイルも変わる